<?php
//länka in filer med funktioner som används
require_once ('./Controller/LoginController.php');
require_once ('./Controller/NewPostController.php');
require_once ('./Controller/RegisterController.php');
require_once ('./Controller/PostController.php');
require_once ('./Controller/PostListController.php');
require_once('./Controller/MasterController.php');
//Models
require_once ('./Model/Blogg.php');
require_once ('./Model/Blogglist.php');
require_once ('./Model/CommentHandler.php');
require_once ('./Model/Comment.php');
require_once ('./Model/LoginHandler.php');
require_once ('./Model/RegisterHandler.php');
//Views
require_once ('./View/PageView.php');
require_once ('./View/NavigationView.php');
require_once ('./View/BloggView.php');
require_once ('./View/RegisterView.php');
require_once ('./View/LoginView.php');
require_once ('./View/CommentView.php');
//Common
require_once ('./Common/Dbconfig.php');
require_once ('./Common/Database.php');
require_once ('./Common/Validation.php');

// En function som testar ovanstånde funktioner
// blir just nu fel då den inte loggar efter test tre vilket den måste för att det ska gå.
/**
 *
 */
class Ctest {

	public function Test() {
		$database = new \Common\Database();
		$database -> Connect(new \Common\ DBConfig());
		$RegistreHandler = new \Model\RegisterHandler($database);
		$lh = new \Model\LoginHandler($database);
		$lh -> DoLogout();

		if ($lh -> IsLoggedIn() == true) {
			echo "1.IsLoggedIn tror att du är inloggad när du inte är det";
			return false;
		}

		$logInFalse = $lh -> DoLogin("sadfasd", "123434");
		if ($logInFalse == true) {
			echo "2.Du kan logga in med felaktiga uppgifter";
			return false;
		}
		if ($lh -> IsLoggedIn() == true) {
			echo "2.2 IsLoggedIn tror att du är inloggad när du inte är det";
			return false;
		}

		$logInTrue = $lh -> DoLogin("johan", "wibjer1");
		if ($logInTrue == false) {
			echo "3. Du kan inte logga in med rätt uppgifter";
			return false;
		}
		if ($lh -> IsLoggedIn() == false) {
			echo "4 Du är inloggad men IsLoggedIn returnerar false";
			return false;
		}
		$lh -> DoLogout();

		if ($lh -> IsLoggedIn() == true) {
			echo "4.3 IsLoggedIn tror att du är inloggad när du inte är det";
			return false;
		}
		return true;
	}

	public function RegTest() {

		$database = new \Common\Database();
		$database -> Connect(new \Common\DBConfig());
		$RegistreHandler = new \Model\RegisterHandler($database);
		//Registrera användare
		if ($RegistreHandler -> RegisterUser('nisse', 'riktiG1', 'riktiG1') != 4) {
			echo 'Test för RegisterUser misslyckades. Användaren registreras inte även att uppgifterna är korrekta.';
			return false;
		}

		$RegistreHandler -> DeleteUser('nisse');
		//Lösenorden skall ha en minimilängd på 6 tecken
		if ($RegistreHandler -> RegisterUser('nisse', 'tre', 'tre') != 3) {
			echo 'Test för RegisterUser misslyckades. Användaren registreras även att lösenordet bara har 3 tecken.';
			$RegistreHandler -> DeleteUser('nisse');
			return false;
		}

		//Båda lösenorden måste vara matchande
		if ($RegistreHandler -> RegisterUser('nisse', 'password', 'wordpass') != 0) {
			echo 'Test för RegisterUser misslyckades. Båda lösenorden måste stämma överens.';
			$RegistreHandler -> DeleteUser('');
			return false;
		}

		//Nya användare får inte ha tomt användarnamn
		if ($RegistreHandler -> RegisterUser('', 'riktig', 'riktig') != 1) {
			echo 'Test för RegisterUser misslyckades. Användaren får inte registrerars med tomt användarnamn.';
			$RegistreHandler -> DeleteUser('');
			return false;
		}

		//Man ska inte kunna skapa två användare med samma namn
		$RegistreHandler -> RegisterUser('nisse', 'riktiG1', 'riktiG1');

		if ($RegistreHandler -> RegisterUser('nisse', 'riktiG1', 'riktiG1') != 2) {
			echo 'Test för RegisterUser misslyckades. Det ska inte gå att skapa två användare med samma namn.';
			$RegistreHandler -> DeleteUser('nisse');
			return false;
		}
		$RegistreHandler -> DeleteUser('nisse');

		//Man skall kunna plocka bort en användare ur databasen
		$RegistreHandler -> RegisterUser('nisse', 'riktiG1', 'riktiG1');
		$RegistreHandler -> RegisterUser('pelle', 'riktiG1', 'riktiG1');
		$RegistreHandler -> DeleteUser('nisse');

		if ($RegistreHandler -> RegisterUser('nisse', 'riktiG1', 'riktiG1') != 4) {
			echo 'Test för DeleteUser misslyckades. Användare plockas inte bort på rätt sätt';
			return false;
		}
		$RegistreHandler -> DeleteUser('nisse');
		$RegistreHandler -> DeleteUser('pelle');

		return true;
	}

	public function ManualTest() {
		$database = new \Common\Database();
		$database -> Connect(new \Common\DBConfig());
		$xhtml = '';

		$rc = new \Controller\RegisterController();
		$rv = new \View\RegisterView();

		//Test 1 för formuläret
		$xhtml .= '<h3>Utdata ska visa ett tomt registerformulär</h3>
						<br/>' . $rv -> DoRegisterBox() . '<br/>';

		//Test 2 för formulöret
		$_POST['newUname'] = 'johansd';
		$_POST['newPword'] = 'testar1';
		$_POST['samePword'] = 'testar1';
		$_POST['register'] = 'register';

		$xhtml .= '<h3>Utdata ska visa ett tomt registerformulär med ett meddelande om att alla fält måste vara ifyllda</h3>
						<br/>' . $rc -> DoControll($database) . '<br/>';

		return $xhtml;

		echo $xhtml;

	}

	public function BlogglistTest() {
		$database = new \Common\Database();
		$database -> Connect(new \Common\DBConfig());
		$sut = new \Model\BloggList($database);

		$allPosts = $sut -> getAllPosts();
		//var_dump($allPosts);
		//var_dump($sut);
		if (get_class($allPosts) != "BloggArray") {
			echo "(BloggList->getAllPosts() returned a " . get_class($allPosts).")";
			return true;
		}

		if (count($allPosts -> get()) != 3) {
			echo "BloggList->getAllPosts() returned wrong number of products";
			return false;
		}

		return true;
	}

}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title>Testdriven utveckling</title>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
	</head>
	<body class="">
		<p>
			<?php
		$database = new \Common\Database();
		$database -> Connect(new \Common\DBConfig());
			//Test av login.php
			//Implementera själv både funktioner och test
			echo "<h2>Login-test</h2>";
			$login = new Ctest();
			if ($login -> Test() == true) {
				echo "<p>Logintest ok</p>";
			} else {
				echo "<p>Logintest fungerar ej</p>";
			}
			if ($login -> RegTest() == true) {
				echo "Regtest Funkar </br>";
			} else {
				echo "Funkar inte </br>";
			}
			if ($login -> BlogglistTest() == true) {
				echo " Blogglist Funkar </br>";
			} else {
				echo " blogglist Funkar inte </br>";
			}

			print_r($login -> BlogglistTest($database));
			print_r($login -> ManualTest());
			?>
		</p>
	</body>
</html>